home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 376-400 / disk_386 / xlispstat / src3.lzh / UNIX / gnuplot.h < prev    next >
C/C++ Source or Header  |  1990-07-30  |  6KB  |  232 lines

  1. /*
  2.  *
  3.  *    G N U P L O T  --  plot.h
  4.  *
  5.  *  Copyright (C) 1986, 1987  Thomas Williams, Colin Kelley
  6.  *
  7.  *  You may use this code as you wish if credit is given and this message
  8.  *  is retained.
  9.  *
  10.  *  Please e-mail any useful additions to vu-vlsi!plot so they may be
  11.  *  included in later releases.
  12.  *
  13.  *  This file should be edited with 4-column tabs!  (:set ts=4 sw=4 in vi)
  14.  */
  15.  
  16. #define PROGRAM "G N U P L O T"
  17. #define PROMPT "gnuplot> "
  18. #define SHELL "/bin/sh"        /* used if SHELL env variable not set */
  19.  
  20. #ifdef vms
  21. #define HELP  "gnuplot "
  22. #else /* vms */
  23. #define HELP  "/usr/local/help gnuplot"
  24. #endif /* vms */
  25.  
  26. #define SAMPLES 160            /* default number of samples for a plot */
  27. #define ZERO    1e-8        /* default for 'zero' set option */
  28.  
  29. #ifdef PC
  30. #define TERM "egalib"
  31. #else /* PC */
  32. #define TERM "regis"        /* put your most common term type here! */
  33. #endif /* PC */
  34.  
  35. #define TRUE 1
  36. #define FALSE 0
  37.  
  38. #define Pi 3.141592653589793
  39.  
  40. #define MAX_POINTS 1
  41. #define MAX_LINE_LEN 255    /* maximum number of chars allowed on line */
  42. #define MAX_TOKENS 200
  43. #define MAX_ID_LEN 20        /* max length of an identifier */
  44.  
  45. #define MAX_AT_LEN 150        /* max number of entries in action table */
  46. #define STACK_DEPTH 100
  47. #define NO_CARET (-1)
  48.  
  49.  
  50. #ifdef vms
  51. #define OS "VMS "
  52. #endif
  53.  
  54. #ifdef unix
  55. #define OS "unix "
  56. #endif
  57.  
  58. #ifdef MSDOS
  59. #define OS "MS-DOS "
  60. #endif
  61.  
  62. #ifndef OS
  63. #define OS ""
  64. #endif
  65.  
  66. /*
  67.  * note about HUGE:  this number is just used as a flag for really
  68.  *   big numbers, so it doesn't have to be the absolutely biggest number
  69.  *   on the machine.
  70.  *
  71.  * define HUGE here if your compiler doesn't define it in <math.h>
  72.  * example:
  73. #define HUGE 1e38
  74.  */
  75.  
  76. #define END_OF_COMMAND (c_token >= num_tokens || equals(c_token,";"))
  77.  
  78.  
  79. #ifdef vms
  80.  
  81. #define is_comment(c) ((c) == '#' || (c) == '!')
  82. #define is_system(c) ((c) == '$')
  83.  
  84. #else /* vms */
  85.  
  86. #define is_comment(c) ((c) == '#')
  87. #define is_system(c) ((c) == '!')
  88.  
  89. #endif /* vms */
  90.  
  91. /*
  92.  * If you're memcpy() has another name, define it below as bcopy() is.
  93.  * If you don't have a memcpy():
  94. #define NOCOPY
  95.  */
  96.  
  97. #ifdef BCOPY
  98. #define memcpy(dest,src,len) bcopy(src,dest,len)
  99. #endif /* BCOPY */
  100.  
  101. #ifdef vms
  102. #define memcpy(dest,src,len) lib$movc3(&len,src,dest)
  103. #endif /* vms */
  104.  
  105. #define top_of_stack stack[s_p]
  106.  
  107. typedef int BOOLEAN;
  108. typedef int (*FUNC_PTR)();
  109.  
  110. enum operators {
  111.     PUSH, PUSHC, PUSHD, CALL, LNOT, BNOT, UMINUS, LOR, LAND, BOR, XOR,
  112.     BAND, EQ, NE, GT, LT, GE, LE, PLUS, MINUS, MULT, DIV, MOD, POWER,
  113.     FACTORIAL, BOOL, JUMP, JUMPZ, JUMPNZ, JTERN, SF_START
  114. };
  115.  
  116. #define is_jump(operator) ((operator) >=(int)JUMP && (operator) <(int)SF_START)
  117.  
  118. enum DATA_TYPES {
  119.     INT, CMPLX
  120. };
  121.  
  122. enum PLOT_TYPE {
  123.     FUNC, DATA
  124. };
  125.  
  126. enum PLOT_STYLE {
  127.     LINES, POINTS, IMPULSES
  128. };
  129.  
  130. struct cmplx {
  131.     double real, imag;
  132. };
  133.  
  134. struct value {
  135.     enum DATA_TYPES type;
  136.     union {
  137.         int int_val;
  138.         struct cmplx cmplx_val;
  139.     } v;
  140. };
  141.  
  142. struct lexical_unit {    /* produced by scanner */
  143.     BOOLEAN is_token;    /* true if token, false if a value */ 
  144.     struct value l_val;
  145.     int start_index;    /* index of first char in token */
  146.     int length;            /* length of token in chars */
  147. };
  148.  
  149. struct ft_entry {        /* standard/internal function table entry */
  150.     char *f_name;        /* pointer to name of this function */
  151.     FUNC_PTR func;        /* address of function to call */
  152. };
  153.  
  154. struct udft_entry {                /* user-defined function table entry */
  155.     struct udft_entry *next_udf; /* pointer to next udf in linked list */
  156.     char udf_name[MAX_ID_LEN+1]; /* name of this function entry */
  157.     struct at_type *at;            /* pointer to action table to execute */
  158.     char *definition;             /* definition of function as typed */
  159.     struct value dummy_value;    /* current value of dummy variable */
  160. };
  161.  
  162. struct udvt_entry {            /* user-defined value table entry */
  163.     struct udvt_entry *next_udv; /* pointer to next value in linked list */
  164.     char udv_name[MAX_ID_LEN+1]; /* name of this value entry */
  165.     BOOLEAN udv_undef;        /* true if not defined yet */
  166.     struct value udv_value;    /* value it has */
  167. };
  168.  
  169. union argument {            /* p-code argument */
  170.     int j_arg;                /* offset for jump */
  171.     struct value v_arg;        /* constant value */
  172.     struct udvt_entry *udv_arg;    /* pointer to dummy variable */
  173.     struct udft_entry *udf_arg; /* pointer to udf to execute */
  174. };
  175.  
  176. struct at_entry {            /* action table entry */
  177.     enum operators index;    /* index of p-code function */
  178.     union argument arg;
  179. };
  180.  
  181. struct at_type {
  182.     int a_count;                /* count of entries in .actions[] */
  183.     struct at_entry actions[MAX_AT_LEN];
  184.         /* will usually be less than MAX_AT_LEN is malloc()'d copy */
  185. };
  186.  
  187. struct coordinate {
  188.     BOOLEAN undefined;    /* TRUE if value off screen */
  189. #ifdef PC
  190.     float x, y;            /* memory is tight on PCs! */
  191. #else
  192.     double x, y;
  193. #endif /* PC */
  194. };
  195.  
  196. struct curve_points {
  197.   struct curve_points *next_cp;    /* pointer to next plot in linked list */
  198.   enum PLOT_TYPE plot_type;
  199.   enum PLOT_STYLE plot_style;
  200.   char *title;
  201.   int p_count;            /* count of points in .points[] */
  202.   struct coordinate *points;    /* will usually be less in malloc()'d copy */
  203. };
  204.  
  205. struct termentry {
  206.     char *name;
  207.     unsigned int xmax,ymax,v_char,h_char,v_tic,h_tic;
  208.     FUNC_PTR init,reset,text,graphics,move,vector,linetype,lrput_text,
  209.         ulput_text,point;
  210. };
  211.  
  212. /*
  213.  * SS$_NORMAL is "normal completion", STS$M_INHIB_MSG supresses
  214.  * printing a status message.
  215.  * SS$_ABORT is the general abort status code.
  216.  from:    Martin Minow
  217.     decvax!minow
  218.  */
  219. #ifdef    vms
  220. #include        <ssdef.h>
  221. #include        <stsdef.h>
  222. #define    IO_SUCCESS    (SS$_NORMAL | STS$M_INHIB_MSG)
  223. #define    IO_ERROR    SS$_ABORT
  224. #endif /* vms */
  225.  
  226. #ifndef    IO_SUCCESS    /* DECUS or VMS C will have defined these already */
  227. #define    IO_SUCCESS    0
  228. #endif
  229. #ifndef    IO_ERROR
  230. #define    IO_ERROR    1
  231. #endif
  232.